# -*- coding: utf-8 -*-

"""
@Datetime: 2018/10/12
@Author: Zhang Yafei
"""
"""
logging
日志：用来记录用户行为 或者 代码的执行的过程
用处：一键控制
1.拍错的时候需要打印很多东西来帮助我排错
2.严重的错误记录下来
3.有一些用户行为，有没有错都要记录下来
"""
"""
import logging
logging.debug('debug message')      #低级别的  排错信息
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')   #高级别的

#basicconfig 简单 能做的事情相对少
    #中文乱码问题
    #不能同时往屏幕和文件输出
#配置log对象 稍微有点复杂，能做的事相对多
"""
"""
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    # datefmt='%a, %d %b %Y %H:%M:%S',
                    datefmt='%Y/%m/%d %H:%M:%S',
                    filename='test.log',
                    filemode='w',
                    )

logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
"""
"""
#logger对象配置
#程序的充分解耦
#让程序变得高可定制性
#5种级别的日志记录模式
#两种配置方式basicconfig,log对象

作业：必须写log
"""
import logging

logger = logging.getLogger()
# 创建一个handler，用于写入日志文件
fh = logging.FileHandler('log.log',encoding='utf-8')
# 再创建一个handler，用于输出到控制台
sh = logging.StreamHandler()  #创建一个屏幕控制对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelno)s - %(levelname)s - [line-%(lineno)d] - %(message)s',datefmt='%Y-%m-%d %H:%M:%S')
fh.setLevel(logging.DEBUG)
#文件操作符 和 格式 关联
fh.setFormatter(formatter)
sh.setFormatter(formatter2)
#logger对象和文件操作符关联
logger.addHandler(fh)       #logger对象可以添加多个fh和ch对象
logger.addHandler(sh)

logger.debug('logger debug message')  #细节
logger.info('logger info message')  #正常信息
logger.warning('警告信息')    #不影响程序，警告信息
logger.error('logger error message')        #错误信息
logger.critical('logger critical message')  #高级别的，严重错误信息